package study.itwill.team5.board;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;

import org.apache.log4j.Logger;

import study.itwill.common.DBHandler;
import study.itwill.common.Util;

public class BoardCategory {
	
	static Logger logger = Logger.getLogger(BoardCategory.class);

	private static final String TABLE = "board_category";

	public int addBoardCategory(String category_name) {
		// -----------------------------------------
		// 메서드 시작
		// -----------------------------------------
		logger.debug("=============== method start >> addBoardCategory");
		logger.debug("[PARAMS] category_name=" + category_name);
		

		// 리턴할 값 선언
		int seq = -1;

		

		// 트랜젝션에 대한 판단이 잘 서지 않는다면, 무조건 하면 된다.
		DBHandler.beginTrans();

		// INSERT 처리를 위한 구현
		String sql = "INSERT INTO board_category(category_name,reg_date,edit_date) VALUES ('%s','%s','%s')";

	

		boolean result = DBHandler.execSql(sql, category_name, Util.getTime(), Util.getTime());

		// -----------------------------------------
		// 결과처리
		// -----------------------------------------
		if (result) {

			DBHandler.commit();
			seq = DBHandler.getMax(TABLE, "seq", null);
			logger.debug("처리결과 >> " + seq + "번 게시판목록 등록 성공");
		} else {
			DBHandler.rollback();
			logger.error("처리결과 >> 데이터 추가 실패");
		}

		logger.debug("=============== method end >  addBoardCategory");

		return seq;

	}

	public boolean editBoardCategory(int seq, String category_name) {
		logger.debug("=============== method start >> editBoardCategory");
		logger.debug("[PARAMS] seq=" + seq);
		logger.debug("[PARAMS] category_name=" + category_name);

		boolean result = false;

		DBHandler.beginTrans();

		String sql = "UPDATE board_category SET category_name = '%s', edit_date ='%s' WHERE seq = %d;";

 
		
		result = DBHandler.execSql(sql, category_name,Util.getTime(),seq);

		if (result) {
			DBHandler.commit();
			logger.debug("처리결과 >> " + seq + "번 게시목록 수정성공");
		} else {
			DBHandler.rollback();
			logger.error("처리결과 >> 데이터 수정 실패 ");
		}

		logger.debug("=============== method end >> editBoardCategory");

		return result;
	}

	public boolean deleteBoardCategory(int seq) {
		logger.debug("=============== method start >> deleteBoardCategory");
		logger.debug("[PARAMS] seq=" + seq);

		boolean result = false;

		DBHandler.beginTrans();

		String sql = "DELETE FROM board_category WHERE seq = %d";
		result = DBHandler.execSql(sql, seq);

		if (result) {
			DBHandler.commit();
			logger.debug("처리결과 >> " + seq + "번 게시목록 삭제 성공");
		} else {
			DBHandler.rollback();
			logger.error("처리결과 >> 데이터 삭제 실패 ");
		}

		logger.debug("=============== method end >> deleteBoardCategory");

		return result;

	}

	public BoardCategoryItem viewBoardCategory(int seq) {
		logger.debug("=============== method start >> viewBoardCategory");
		logger.debug("[PARAMS] seq=" + seq);

		BoardCategoryItem item = null;

		// 데이터 조회
		String sql = "SELECT seq, category_name, reg_date, edit_date FROM board_category WHERE seq = %d";
		ResultSet rs = DBHandler.getResult(sql, seq);

		if (rs != null) {
			// 데이터 조회 결과 있는 경우
			try {
				rs.next();

				// 1) ResultSet의 모든 데이터를 변수로 추출
				int seq1 = rs.getInt(1);
				String category_name = rs.getString(2);
				String reg_date = rs.getString(3);
				String edit_date = rs.getString(4);
				// 2) 추출된 값을 객체로 구성
				item = new BoardCategoryItem(seq1,category_name,reg_date,edit_date);

			} catch (SQLException e) {
				logger.error(e);
			} finally {
				// 3) 데이터 조회에 대한 메모리 반납
				try {
					rs.close();
				} catch (SQLException e) {}
				rs = null;
			}
		}
		
		if(item == null) {
			logger.error("데이터 조회 실패");
		} else {
			logger.debug("데이터 조회 성공");
			logger.debug(item.toString());
		}
				
		logger.debug("=============== method end >> viewBoardCategory");
		
		return item;
		
	}

	public ArrayList<BoardCategoryItem> listBoardCategory() {
		logger.debug("=============== method start >> listBoardCategory");

		ArrayList<BoardCategoryItem> list = null;

		// 데이터 조회
		String sql = "SELECT seq, category_name, reg_date, edit_date FROM board_category;";

		ResultSet rs = DBHandler.getResult(sql);

		if (rs != null) {
			// 데이터 조회 결과 있는 경우
			try {
				list = new ArrayList<BoardCategoryItem>();

				while (rs.next()) {

					// 1) ResultSet의 모든 데이터를 변수로 추출
					int seq1 = rs.getInt(1);
					String category_name = rs.getString(2);
					String reg_date = rs.getString(3);
					String edit_date = rs.getString(4);

					// 2) 추출된 값을 객체로 구성
					BoardCategoryItem item = new BoardCategoryItem(seq1,category_name,reg_date,edit_date);

					// 3) ArrayList에 추가
					list.add(item);
				}
			} catch (SQLException e) {
				logger.error(e);
			} finally {
				// 4) 데이터 조회에 대한 메모리 반납
				try {
					rs.close();
				} catch (SQLException e) {
				}
				rs = null;
			}
		}

		if (list == null) {
			logger.error("데이터 조회 실패");
		} else {
			logger.debug("데이터 조회 성공 >> " + list.size() + "건 조회됨");
		}

		logger.debug("=============== method end >> listBoardCategory");

		return list;
	}

}
